Istio WasmPlugin
개요
와즘 플러그인은 엔보이의 와즘 지원에 발 맞춰 이를 더 편하고 안정된 형태로 제공하기 위해 만들어진 리소스이다.[1]
사실 이스티오 엔보이필터로도 이걸 넣는 게 불가능한 건 아니지만, 조금 더 간단한 형태를 만들어낸 것이다.
일단 외부의 와즘 코드 주소를 명시해줘야 한다.
당연히 그래야 해당 코드를 가져와서 적용을 시킬 수 있을 것이다.
와즘 소스는 OCI를 준수하는 레포지토리에 전부 올릴 수 있게 돼있으며, 해당 주소에서 데이터를 받아오면 된다.
아키텍처
큰 레벨에서 아키텍처는 이러한 모양을 가지고 있다.
일단 엔보이 필터로서 동작을 하긴 한다.
해당 필터에서 지원하는 몇가지 api가 있고, 이를 기반으로 와즘 바이너리가 동작할 수 있는 것이다.
설정 적용 흐름
코드를 가져오는 방식은 다음과 같다.
먼저 istiod가 이 리소스를 읽고, 해당 정보를 프록시에 전달한다.
그럼 pilot-agent가 직접 해당 주소에서 바이너리를 가져오며, 엔보이로 하여금 해당 바이너리를 참조하도록 만든다.
양식 작성법
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: openid-connect
namespace: istio-ingress
spec:
selector:
matchLabels:
istio: ingressgateway
phase: AUTHN
priority: 1000
url: oci://private-registry:5000/openid-connect/openid:latest
imagePullPolicy: IfNotPresent
imagePullSecret: private-registry-pull-secret
pluginName: test
pluginConfig:
openid_server: authn
openid_realm: ingress
type: NETWORK
phase
필드로 어떤 필터 체인에 들어갈지 지정한다.
- AUTHN - 가장 앞.
- AUTHZ - 인증과 인가 사이.
- STATS - 스탯 필터 전
- UNSPECIFED_PHASE - istiod가 정하는데 보통은 라우터 필터 직전에 삽입한다.
여러 와즘 플러그인이 들어갈 때 priority
의 값이 클수록 먼저 들어간다.
그리고 url
을 통해 바이너리를 가져올 주소를 넣으면 된다.
이때 스킴은 기본은 oci이고, 프록시 파일 시스템이 이미 있다면 file을 써도 된다.
http도 가능.
pluginName
을 통해 엔보이 내 설정에서 사용될 이름을 설정한다.
pluginConfig
는 여러 키값쌍을 넣어 와즘 바이너리에서 쓰일 인자를 넣는다.
type
은 어떤 와즘 익스텐션인지 나타낸다.
현재 HTTP, NETWORK가 가능한데 이게 결국 해당 와즘이 사용할 수 있는 인터페이스를 나타내기 때문에 잘 지정해야 한다.
C++ 코드로 제공하는 인터페이스는 이런 게 있다고 한다.[2]
관련 문서
EXPLAIN - 파생 문서
이름0 | related | 생성 일자 |
---|
기타 문서
Z0-연관 knowledge, Z1-트러블슈팅 Z2-디자인,설계, Z3-임시, Z5-프로젝트,아카이브, Z8,9-미분류,미완이름1 | 코드 | 타입 | 생성 일자 |
---|---|---|---|
엔보이에 와즘 플러그인 적용해보기 | Z8 | topic | 2025-06-09 02:29 |